1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4
5 public class Rules : MonoBehaviour {
6
7 public static bool IsAlly(Piece piece1, Piece piece2) {
8 GCPlayer p1 = GameManager.Instance.P1;
9 if (p1.Has(piece1) && p1.Has(piece2)) return true;
10
11 GCPlayer p2 = GameManager.Instance.P2;
12 if (p2.Has(piece1) && p2.Has(piece2)) return true;
13
14 return false;
15 }
16
17 public static bool IsEnemy(Piece piece1, Piece piece2) {
18 GCPlayer p1 = GameManager.Instance.P1;
19 if (p1.Has(piece1) && !p1.Has(piece2)) return true;
20 if (p1.Has(piece2) && !p1.Has(piece1)) return true;
21 return false;
22 }
23
24 public static bool CheckKing(GCPlayer player, Node checkedByNode, Node checkedNode) {
25 if (checkedNode.Piece.PieceType == PieceType.CROSS) {
26 GameManager.Instance.Opponent(player).CheckedBy = checkedByNode.Piece;
27 //checkedPiece.Node.HighlightCheck(); //Experimental
28 //checkedBy.Node.HighlightCheck(); //Experimental
29 return true;
30 }
31 return false;
32 }
33
34 //Modifies the move if modify = true
35 //not safe
36 public static bool IsCheckMove(GCPlayer player, Piece piece, Node tNode, bool modify) {
37 Node oldNode = piece.Node;
38 piece.UpdateNode(tNode);
39 Piece checkedBy = player.CheckedBy;
40 player.ClearCheck();
41 GameManager.Instance.Opponent(player).ComputePieces();
42 if (player.IsChecked) {
43 piece.UpdateNode(oldNode);
44 player.CheckedBy = checkedBy;
45 return true;
46 }
47
48 if (!modify) {
49 piece.UpdateNode(oldNode);
50 player.CheckedBy = checkedBy;
51 }
52 return false;
53 }
54
55 public static bool IsGuardedMove(GCPlayer player, Piece piece, Node tNode) {
56 List<Piece> oppPieces = GameManager.Instance.Opponent(player).Pieces;
57 for (int i = 0; i < oppPieces.Count; i++) {
58 if (oppPieces[i].IsPossibleMove(tNode)) {
59 return true;
60 }
61 }
62
63 return false;
64 }
65
66
67 //Modifies the move if modify = true;
68 public static bool IsCheckEat(GCPlayer player, Piece piece, Node tNode, bool modify) {
69 Node oldNode = piece.Node;
70 Piece tPiece = tNode.Piece;
71 tPiece.UpdateNode(null);
72 piece.UpdateNode(tNode);
73 Piece checkedBy = player.CheckedBy;
74 player.ClearCheck();
75 GameManager.Instance.Opponent(player).ComputePieces();
76 if (player.IsChecked) {
77 piece.UpdateNode(oldNode);
78 tPiece.UpdateNode(tNode);
79 player.CheckedBy = checkedBy;
80 return true;
81 }
82
83 if (!modify) {
84 piece.UpdateNode(oldNode);
85 tPiece.UpdateNode(tNode);
86 player.CheckedBy = checkedBy;
87 }
88 return false;
89 }
90
91 public static bool HasNoMove() {
92 GCPlayer player = GameManager.Instance.CurrentPlayer;
93 List<Piece> pieces = player.Pieces;
94
95 for (int i = 0; i < pieces.Count; i++) {
96 List<Node> possibleMoves = pieces[i].PossibleMoves;
97 for (int j = 0; j < possibleMoves.Count; j++) {
98 Node tNode = possibleMoves[j];
99 if (!Rules.IsCheckMove(player, pieces[i], tNode, false)) {
100 return false;
101 }
102 }
103
104 List<Node> possibleEats = pieces[i].PossibleEats;
105 for (int j = 0; j < possibleEats.Count; j++) {
106 Node tNode = possibleEats[j];
107 if (!Rules.IsCheckEat(player, pieces[i], tNode, false)) {
108 return false;
109 }
110 }
111 }
112
113 return true;
114 }
115 }
checkedPiece.Node.HighlightCheck(); Experimental
checkedBy.Node.HighlightCheck(); Experimental
Modifies the move if modify = true
not safe
Modifies the move if modify = true;